export default {
	//为当前模块开启命名空间
	namespaced: true,

	//模块的state数据
	state: () => ({
		//购物车的数组，用来存储购物车中每个商品的信息对象
		//每个商品的信息对象，都包含如下6个属性：
		//goods_id, goods_name, goods_price, goods_count,goods_small_logo, goods_state 
		cart: JSON.parse(uni.getStorageSync('cart') || '[]'),
	}),

	//模块的mutations方法
	mutations: {
		//添加到购物车函数
		addToCart(state, goods) {
			//根据提交的商品id，查询购物车中是否存在这件商品
			//如果不存在，则findResult为undefined；否则，为查找到的商品信息对象
			const findResult = state.cart.find((x) => x.goods_id === goods.goods_id)
			console.log(state.cart)
			if (!findResult) {
				//如果购物车中没有这件商品，则直接push
				state.cart.push(goods)
			} else {
				//如果购物车中有这件商品，则只更新数量即可
				findResult.goods_count++
			}
			console.log(state.cart)
			//这里为什么在文件内部不能直接调用，还需要用commit方法呢
			this.commit('m_cart/saveToStorage')
		},
		//将购物车中的数据持久化到本地
		saveToStorage(state) {
			uni.setStorageSync('cart', JSON.stringify(state.cart))
		},
		//更新state的值
		updateGoodsState(state, goods) {
			const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
			if (findResult) {
				findResult.goods_state = !goods.goods_state
				//这里为什么在文件内部不能直接调用，还需要用commit方法呢
				this.commit('m_cart/saveToStorage')
			}
		},
		//更新count的值
		updateGoodsCount(state, goods) {
			const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
			if (findResult) {
				console.log("我是cart.js中的updateGoodsCount")
				findResult.goods_count = goods.goods_count
				//这里为什么在文件内部不能直接调用，还需要用commit方法呢
				this.commit('m_cart/saveToStorage')
			}
		},
		//删除指定goods_id的商品
		removeGoodsById(state, goods_id) {
			state.cart = state.cart.filter(x => x.goods_id != goods_id)
			//这里为什么在文件内部不能直接调用，还需要用commit方法呢
			this.commit('m_cart/saveToStorage')
		},
		//更新为全部选中状态
		updateAllState(state, isSelectAll) {
			//如果全选了，就全部更新为全不选。否则的话更新为全选状态
			state.cart.forEach(x => x.goods_state = !isSelectAll)
			//这里为什么在文件内部不能直接调用，还需要用commit方法呢
			this.commit('m_cart/saveToStorage')
		}
	},

	//模块的getters方法
	getters: {
		//统计购物车中商品的数量
		total(state) {
			let c = 0
			//循环统计商品的数量，累加到变量c中
			state.cart.forEach(goods => c += goods.goods_count)
			return c
		},
		//统计购物车中被勾选的商品的总数量
		checkedCount(state) {
			let total = state.cart.filter(x => x.goods_state).reduce((total, item) => total += item.goods_count, 0)
			console.log(total)
			return total
		},
		//统计购物车总金额
		checkoutAmount(state) {
			let amount = state.cart.filter(x => x.goods_state).reduce((total, item) => total += item.goods_count * item
				.goods_price, 0)
			return Number(amount).toFixed(2)
		},
		//判断是否被全选
		isSelectAll(state) {
			let num = state.cart.filter(x => !x.goods_state).length
			if (state.cart.length === 0 || num !== 0) {
				return false
			}
			return true
		},
	},
}